import os
import sys
import requests
import json
from json import JSONEncoder
import logging
import logging.handlers
import fileinput
import zipfile
import importlib


# 日志模块
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logFormat = logging.Formatter("%(message)s")

# 日志输出流
stream = logging.StreamHandler()
stream.setFormatter(logFormat)
logger.addHandler(stream)

update_py_url = ''
py_dir = 'ccb_py'
py_name = 'ccb.zip'
version_dir = f'{py_dir}/version'

#update_version_url = 'http://127.0.0.1:5000/ccb/api/updatePy'
def env(key):
	return os.environ.get(key)

# 1. 获取下载地址，并判断版本号，是否需要更新
# 2. 下载最新脚本文件
# 3. 解压文件

#获取本地的版本号
def getLocaVersion():
	version = '0'
	basepath = os.path.dirname(__file__)
	version_file_path = os.path.join(basepath, version_dir)
	try:
		if os.path.exists(version_file_path):
			with fileinput.input(files=(version_file_path,)) as file:
				version = file[0]
	except Exception as e:
		logger.error('获取脚本版本号失败！',e)
	return version

def updateVersion(update_version_url):
	resp = requests.get(f'{update_version_url}?version={getLocaVersion()}', stream=True,verify=False)
	if(resp.status_code == 201):
		return True
	elif(resp.ok):
		basepath = os.path.dirname(__file__)
		py_file_dir = os.path.join(basepath, py_dir)
		if not os.path.exists(py_file_dir):
			os.makedirs(py_file_dir)
		else:
			del_file(py_file_dir)
		py_file_path = os.path.join(basepath, py_dir, py_name)
		with open(py_file_path,"wb") as f:
			f.write(resp.content)
			f.close()
		#解压文件
		# 注意压缩格式选择
		frzip = zipfile.ZipFile(py_file_path, 'r', zipfile.ZIP_DEFLATED)
		# 将所有文件加压缩到指定目录
		frzip.extractall(py_file_dir)
		frzip.close()
		newVersion = getLocaVersion()
		logger.info(f'版本更新成功 , 当前版本：{newVersion}')
		return True
	else:
		content = resp.content.decode('utf-8')
		logger.info(content)
		return False

#删除一个文件夹下的所有所有文件
def del_file(path):
	ls = os.listdir(path)
	for i in ls:
		c_path = os.path.join(path, i)
		#logger.info(f'删除文件：{c_path}')
		if os.path.isdir(c_path):#如果是文件夹那么递归调用一下
			del_file(c_path)
		else:                    #如果是一个文件那么直接删除
			os.remove(c_path)

if __name__=='__main__':
	url = env('CCB_PY_SERVER')
	# url='http://192.168.11.241:5000/ccb/api/updatePy'
	if(url is None or len(url)==0):
		logger.info('缺少环境变量 CCB_PY_SERVER, 请配置后重试！')
	updateStatus = updateVersion(url)
	if(updateStatus):
		sys.path.append('ccb_py/')
		module = importlib.import_module('ccb_ql_task')
		module.main()